//==========================================================================
/**
* @file	  : Hannover.h
* @author : cpzhang <chengpengzhang@gmail.com>
* created : 2010-4-29   18:25
* purpose : 
*/
//==========================================================================

#ifndef __Hannover_h__
#define __Hannover_h__

//
#include "Buddha.h"

//
#include "Game.h"

//
#include "IModules.h"

//
class Tile
{
public:
	Tile(const std::string& name, D3DXVECTOR3 pos)
		:	_texName(name), _leftTop(pos)
	{}
	~Tile()
	{}
public:
	std::string		_texName;
	D3DXVECTOR3		_leftTop;
};

//
class Hannover : public Buddha::Game
{
public:
	Hannover();
	~Hannover();

public:
	//
	virtual bool update();

	//
	virtual bool forePlay();
	virtual bool postPlay();
	//
	virtual bool foreRender();

	//
	virtual bool rendering();

	//
	virtual bool postRender();

private:
	//
	bool createModules();

	//
	bool createFonts();
	
	//
	bool initTiles();

	//
	void renderAxis();

	//
	void renderGrids();

	//
	void renderBackground();

	//
	void renderTiles();

	//
	void renderGUI();

	//
	bool updateGUI();

	//
	bool updateTiles();

	//
	void screen2World(POINT& p);

	//
private:
	IModules*		_modules;
	std::string		_faceName;

	//
	unsigned int	_gridsNumX;
	unsigned int	_gridsNumZ;
	int	_gridUnit;

	//
	std::map<std::string, Euclid::ITexture*>	_texs;
	std::vector<Tile>					_tiles;

	//
};

#endif // __Hannover_h__
